ASP.NET Core 2.0入门

使用 psql 操作 PostgreSQL

作者:陈广 日期:2018-6-9


我们在使用 PostgreSQL 时,一般会把数据库安装在远程服务器上。一般情况下,我们会使用 pgadmin 客户端程序来远程维护数据库。但如果所使用电脑没有客户端工具,也不方便安装,就需要使用 Linux 终端的命令行方式来控制数据库了。PostgreSQL 自带的 psql 命令可以解决这个问题,本文将介绍并演示 psql 的一些基本命令的使用。

要使用 psql,需要按照上一篇文章所介绍的那样登录数据库:

su - postgres
psql -U postgres

如果出现postgres=#提示符状态,则表示登录成功了。

创建数据库

接下来我们创建一个表示学生信息的数据库,取名为:StuInfo

输入命令:

CREATE DATABASE StuInfo;

这里需要注意,CREATE DATABASE必须大写,语句的最后必须加上;号。这其实就是标准的 SQL 语句,还是很好用的。

浏览数据库列表

接下来输入\l命令来查看所有数据库,注意是字母l,不是数字1。最终效果如下图所示: 可以看到数据库列表中一共有四个数据库,其中的stuinfo就是我们新建的那个数据库。

使用指定数据库

下面我们针对StuInfo数据库进行操作,进入此数据库可使用命令:

\c stuinfo

当出现stuinfo=#时,说明我们正针对StuInfo进行操作。如下图:

创建数据表

之前在一个程序比赛中做过裁判,参赛选手是已经工作的人。很多选手设计的表结构让我大吃一惊,完全没有章法,乱七八槽,大量冗余。对于关系型数据库来说,设计符合范式的表应该是程序员最基本的基本功。我本身对数据库研究不深,这里就不详述了。我们只演示最基本的东西。你要问如何设计规范的表?我给的建议就是微软的 SQL Server 和 Access 都自带示例数据库,去研究一下基本就懂了。使用学生信息做为示例,是因为对学生来说,这是最容易理解的。

系部表

首先使用以下命令创建系部表depment

CREATE TABLE depment(
    depId INT PRIMARY KEY,
    depName CHAR(30)
);

注意命令大写,命令中可使用回车,psql 会通过;来判定命令的结束。

使用命令\d查看所有数据表,使用\d + 表名查看指定表结构,此例中为\d depment。效果如下图所示:

班级表

使用如下命令创建班级表class:

CREATE TABLE class(
    classId INT PRIMARY KEY,
    className VARCHAR(50) NOT NULL,
    depId INT REFERENCES depment(depId)
);

效果如下图所示:

学生表

使用如下命令创建学生表'student`:

 CREATE TABLE student(
    stuId INT PRIMARY KEY,
    stuName CHAR(8) NOT NULL,
    sex CHAR(2),
    birthday DATE,
    classId INT REFERENCES class(classId)
);

效果如下图所示:

插入数据

接下来向各表插入一些数据。

系部表

使用如下命令向系部表插入4条数据:

INSERT INTO depment VALUES(1,'机械系');
INSERT INTO depment VALUES(2,'电气系');
INSERT INTO depment VALUES(3,'计算机系');
INSERT INTO depment VALUES(4,'工商系');

接下来使用如下命令查看插入的数据:

select * from depment;

操作完成后,效果如下图所示:

班级表

使用如下命令向班级表插入5条数据:

INSERT INTO class VALUES(1,'自动化1701',2);
INSERT INTO class VALUES(2,'数据控1701',1);
INSERT INTO class VALUES(3,'物联网1701',3);
INSERT INTO class VALUES(4,'物联网1702',3);
INSERT INTO class VALUES(5,'软件1701',3);

效果如下图所示:

学生表

使用如下命令向学生表插入8条数据:

INSERT INTO student VALUES(1,'张三','男','1995-6-1',3);
INSERT INTO student VALUES(2,'李四','男','1995-7-1',3);
INSERT INTO student VALUES(3,'王五','女','1995-8-1',3);
INSERT INTO student VALUES(4,'马六','男','1995-8-2',3);
INSERT INTO student VALUES(4,'钱七','女','1996-8-3',3);
INSERT INTO student VALUES(6,'刘八','男','1996-8-4',3);
INSERT INTO student VALUES(7,'何九','女','1996-8-5',3);
INSERT INTO student VALUES(8,'吕十','女','1996-8-5',3);

学生表的stuId字段应为字符串,且用完整学号,这里偷懒,见谅了。

查询

现在数据库里已经有了数据,接下来写几条简单的查询语句练练手。

  • 显示所有班级信息:
select className as 班级名称,depName as 所属系部
 from class,depment where class.depId=depment.depId;

效果如下图所示:

  • 显示所有学生信息:
select stuid,stuname,sex,birthday,className,depName 
   from student,class,depment
   where student.classId=class.classId 
         and class.depId=depment.depId;

运行结果如下图所示:

  • 显示物联网1701班的所有女生信息:
select stuid,stuname,sex,className
   from student,class
   where student.classId=class.classId
     and className='物联网1701'
     and sex='女';

运行结果如下图所示:

好吧,命令行方式就讲到这了,说实在的,很不方便,仅应急使用,专业 DBA 另说。删除、更新什么的我也不演示了,反正是标准 SQL 语句,还是很方便的。

;

© 2018 - IOT小分队文章发布系统 v0.3